/****************************************************
  @Title: 数据结构实验
  @Name: <实验1-1> 起泡排序
  @Object:
     [实验目的]
        把起泡排序的算法改写成C语言程序，并编写程序
        进行调试。掌握如何把类C语言书写的算法改写成
        C语言程序。
        
     [实验提示]
        1）怎样将类C语言算法改写成C语言程序？
           如：怎样处理局部变量，怎样处理符号常量等。

        2）怎样书写程序才能提高代码的可读性？
           如：文件的格式，函数声明的位置，主函数的位置，
           函数具体实现的位置，采用缩进格式等。
     
  @Usage:
      请查看"TO-DO列表",根据要求完成代码
  @Copyright: BTC 2004
  @Author: Zhuang Bo
  @Date: 2004
  @Description:
*****************************************************/

///////////////////////////////////////////////////////////
// 包含头文件
#include <stdio.h>

///////////////////////////////////////////////////////////
// 对主函数中调用的函数进行声明

// 对数组a[0..n-1]进行起泡排序，使数据从小到大有序
//-------------------------------------
// TODO (#1#): 这里插入函数bubble_sort()的声明

//-------------------------------------

// 顺序打印数组a中的元素  
void print_out(int a[],int n);


///////////////////////////////////////////////////////////
// 起泡排序 主程序
int main()
{
	// 测试数据
	int a[]={82,47,29,74,91,53,82,62,98,51};
	
	printf("起泡排序\n");
	
	// 打印排序前的数据
	printf("排序前:\n");
	print_out(a,10);
	
	// 进行起泡排序
    //-------------------------------------
    // TODO (#1#): 这里调用bubble_sort()对数组a排序
    
    //-------------------------------------

	// 打印排序后的数据
	printf("排序后:\n");
	print_out(a,10);
}

///////////////////////////////////////////////////////////
// 函数的实现定义在下面 

#define  TRUE 	1
#define  FALSE 	0

// 对数组a[0..n-1]进行起泡排序，使数据从小到大有序
void bubble_sort(int a[],int n)
{
    //-------------------------------------
    // TODO (#1#): 这里定义函数中用到的变量
    
    //-------------------------------------
    
	for( i=n-1,change=TRUE; i>=1 && change; --i ) {
		change = FALSE;
		for( j=0; j<i; ++j)
			if( a[j] > a[j+1] ) {
				//-------------------------------------
                // TODO (#1#): 这里交换 a[j] 和 a[j+1]
                
                //-------------------------------------
				change = TRUE;
			}
	}
} // bubble_sort

// 顺序打印数组a中的元素
void print_out(int a[],int n)
{
	int i;
	
	for(i=0; i<n; i++)
		printf(" %d",a[i]);
	printf("\n");
}

